7. Local Node-Level Measures

Assistant Prof. Dr. Siwachoat Srisuttiyakorn

Department of Educational Research and Psychology
Faculty of Education Chulalongkorn University

2025-03-08

Outline

บทเรียนนี้จะกล่าวถึงตัวชี้วัดคุณลักษณะของเครือข่ายระดับบุคคล (local-level measures)

  • Ego-network measures (local measures) – ทำความเข้าใจคุณลักษณะของเครือข่ายรอบโหนด/บุคคล

  • Centrality measures – การวัดตำแหน่งของโหนดเชิงศูนย์กลาง

1. Ego-network measures

  • Social Capital – คุณลักษณะของโหนดหรือความสัมพันธ์ในเครือข่ายช่วยสร้างโอกาสหรือความได้เปรียบในการประสบความสำเร็จ อย่างไร

  • Social Influence – โหนดแต่ละโหนดได้รับอิทธิพลจาก Alters อย่างไรในเชิงของความเชื่อ ทัศนคติ บรรทัดฐานทางสังคม พฤติกรรม แนวปฏิบัติ หรือเงื่อนไขต่าง ๆ

ตัวชี้วัด local node-level ทำหน้าที่เป็นได้ทั้ง ตัวแปรอิสระเพื่อทำนายผลลัพธ์ที่สนใจ และถูกวิเคราะห์เป็นตัวแปรตามก็ได้ เพื่ออธิบาย/ค้นหาตัวแปรอิสระที่มีความสัมพันธ์หรือเป็นสาเหตุของคุณลักษณะของเครือข่ายระดับโหนดนี้

  • โหนดที่มีเครือข่ายกว้างขวาง (popularity สูง) —> ประสบความสำเร็จสูง

  • มีปัจจัยใดที่ทำให้บุคคล/โหนดมีความ popularity สูง?

1. Ego-network measures

  • Egonet – เครือข่ายย่อยที่เป็นส่วนหนึ่งของเครือข่ายทั้งหมด ประกอบด้วย โหนดที่เรียกว่า ego และโหนดอื่น ๆ ที่เชื่อมโยงกับ ego โดยตรง เรียกว่า alters

  • การเก็บรวบรวมข้อมูลของ egonet สามารถทำได้ 2 ลักษณะ

    • personal-network research design

    • whole-network research design

1. Ego-network measures

  • Tie composition — ลักษณะความสัมพันธ์ที่ ego มีกับ alters

    • จำนวน/สัดส่วนของความสัมพันธ์แต่ละประเภทของ ego

    • ค่าเฉลี่ย/ค่าสูงสุด/มัธยฐานของระดับความสัมพันธ์/ระยะเวลาความสัมพันธ์

  • Alter composition — คุณลักษณะของ alters ที่ ego ไปมีความสัมพันธ์ด้วย

    • จำนวน/สัดส่วนของ alter แต่ละประเภทที่ ego มี

    • ค่าเฉลี่ย/ค่าสูงสุด/มัธยฐานของคุณลักษณะเชิงปริมาณของ alter

1. Ego-network measures

  • Ego-alter similarity — ความคล้ายคลึงระหว่าง ego กับ alter ในเชิงของคุณลักษณะที่สนใจ

    • selection: ego สร้างความสัมพันธ์กับบุคลที่มีคุณลักษณะคล้ายกับตัวเองตั้งแต่แรก

    • inflluence: ego มีปฏิสัมพันธ์กับ alter ไประยะเวลาหนึ่งทำให้เกิดการเปลี่ยนแปลงตนเองให้คล้ายกับ alter มากขึ้น

      • เพศ สาขาวิชา กิจกรรมที่ชอบเข้าร่วม รายวิชาเลือกที่ลงทะเบียน/ชอบ —> แนวโน้ม/จำนวนของ ties ของ ego กับ alters ที่มีคุณลักษณะเหมือนกัน

      • ค่าเฉลี่ย/summary stat ของความคล้ายคลึงระหว่างคุณลักษณะของ ego กับ alters เช่น ค่าเฉลี่ยความแตกต่างของอายุ /จำนวนชั่วโมงการอ่านหนังสือ ระหว่าง ego กับ alter

      • correlation ระหว่างการมี/ไม่มี ties กับความคล้ายคลึงหรือความแตกต่างของคุณลักษณะ

1. Ego-network measures

  • Ego-network structure — เน้นอธิบายรูปร่าง (shape) และความเชื่อมโยงกัน (cohesiveness) ของเครือข่ายรอบ ego

    • structural hole

    • bridging between alters

    • ตัวชี้วัดสำหรับ whole network หลายตัวก็สามารถนำมาประยุกต์ใช้ได้ เช่น density, centralization, number of components, average distance

2. Tie Composition: Degree

  • ประเภทและระดับความสัมพันธ์ระหว่าง ego กับ alters

  • Binary network data: กำหนดให้ \(x_{ijq}\) แทนความสัมพันธ์ q ระหว่าง ego ที่ i กับ alter ที่ j โดยที่ \(x_{ijq} = 1\) หมายถึงมีความสัมพันธ์ จำนวนความสัมพันธ์แต่ละประเภทที่ ego i มี สามารถเขียนได้ดังนี้ (จำนวนความสัมพันธ์ของ node นี้เรียกว่า degree ของ ego)

\[ d_{iq} = \sum_{j} x_{ijq} \]

2. Tie Composition: Agresti’s index

  • วัดระดับของความแตกต่าง (heterogeneity) ของความสัมพันธ์ที่แต่ละ ego มี

  • มีค่าอยู่ในช่วง 0-1 ใกล้ 1 แสดงว่าเครือข่ายของ ego มีความหลากหลายสูง

\[ IQV = \frac{1-\sum_{q=1}^{Q} p_{iq}^{2}}{1-\frac{1}{Q}} \] โดยที่ \(p_{iq}\) คือ สัดส่วนของความสัมพันธ์แบบ q ที่ ego i มี กล่าวคือเท่ากับ จำนวน degree หารด้วยผลรวมของ degree ทั้งหมดของ ego i ในทุกความสัมพันธ์ ส่วน \(Q\) คือจำนวนประเภทของความสัมพันธ์ทั้งหมด

### calculate ego IQV: รับ data.frame ของ degree
### คอลัมน์แรกต้องเป็น node name
### คอลัมน์ที่เหลือเป็น degree ของ ego แต่ละประเภท
ego_iqv <- function(degree_df) {
  degree_df %>%
    pivot_longer(cols = -1, names_to = "Tie", values_to = "Outdegree") %>%
    group_by(node) %>%
    mutate(Q = length(Outdegree),
           p = Outdegree / sum(Outdegree),
           ) %>% 
    summarise(
              IQV = (1 - sum(p^2)) / (1 - 1/Q), .groups = "drop") %>% 
    unique()
}

2. Tie Composition: Agresti’s index

degree_df <- data.frame(
outdegree_game = Hawthorne_BankWiring$Game %>% 
   graph_from_adjacency_matrix(mode = "directed") %>% 
  igraph::degree(mode = "out"),

outdeg_conflict = Hawthorne_BankWiring$Conflict %>% 
  graph_from_adjacency_matrix(mode = "directed") %>% 
  igraph::degree(mode = "out"),

outdeg_friendship = Hawthorne_BankWiring$Friendship %>%
   graph_from_adjacency_matrix(mode = "directed") %>% 
  igraph::degree(mode = "out"),

outdeg_antagonistic = Hawthorne_BankWiring$Antagonistic %>%
   graph_from_adjacency_matrix(mode = "directed") %>% 
  igraph::degree(mode = "out"),

outdeg_help = Hawthorne_BankWiring$Help %>%
   graph_from_adjacency_matrix(mode = "directed") %>% 
  igraph::degree(mode = "out"),

outdeg_trade = Hawthorne_BankWiring$TradeJobs %>%
   graph_from_adjacency_matrix(mode = "directed") %>% 
  igraph::degree(mode = "out")

)
# A tibble: 14 × 2
   node    IQV
   <chr> <dbl>
 1 I1    0.686
 2 I3    0    
 3 S1    0.881
 4 S2    0.6  
 5 S4    0.917
 6 W1    0.845
 7 W2    0.732
 8 W3    0.674
 9 W4    0.905
10 W5    0.892
11 W6    0.911
12 W7    0.96 
13 W8    0.811
14 W9    0.919

3. Valued Tie Composition

  • กรณีที่เรามีข้อมูลความสัมพันธ์ที่มีค่าเชิงปริมาณ (valued tie data) ตัวชี้วัดระดับ/ความแข็งแรงของความสัมพันธ์ที่ ego มีต่อ alters สามารถทำได้โดยใช้ summary stat ของค่าความสัมพันธ์ดังกล่าว เช่น ค่าเฉลี่ย หรือมัธยฐาน หรือปริมาณอื่น ๆ ที่สะท้อนความสัมพันธ์หรือการสื่อสารทั้งหมดที่ ego มีกับ alters
# ฟังก์ชันสร้างตารางสรุปสำหรับแต่ละโหนด
create_summary_table <- function(graph) {
  # ดึงค่าทั้งหมดของ strength (น้ำหนักรวมของเส้นเชื่อมแต่ละโหนด)
  node_strengths <- strength(graph, mode = "all", weights = E(graph)$weight)
  
  # ดึง alter ของแต่ละโหนด (degree)
  num_alters <- degree(graph, mode = "all")

  # ดึงน้ำหนักของเส้นเชื่อม (tie strengths) เป็นรายการของแต่ละโหนด
  tie_strength_list <- lapply(V(graph), function(v) {
    incident_edges <- E(graph)[incident(graph, v, mode = "all")]
    edge_weights <- incident_edges$weight
    if (length(edge_weights) == 0) return(NA) # กรณีโหนดไม่มี edge
    return(edge_weights)
  })
  
  # สร้าง DataFrame
  summary_df <- data.frame(
    Node = V(graph)$name,  
    Number_of_alters = num_alters,
    Sum_of_tie_strengths = node_strengths,
    Average_tie_strength = sapply(tie_strength_list, mean, na.rm = TRUE),
    SD_tie_strength = sapply(tie_strength_list, sd, na.rm = TRUE),
    Median_tie_strength = sapply(tie_strength_list, median, na.rm = TRUE),
    Minimum_tie_strength = sapply(tie_strength_list, min, na.rm = TRUE),
    Maximum_tie_strength = sapply(tie_strength_list, max, na.rm = TRUE),
    Range_of_tie_strength = sapply(tie_strength_list, function(x) max(x, na.rm = TRUE) - min(x, na.rm = TRUE))
  )
  
  return(summary_df)
}

3. Valued Tie Composition

Zachary_KarateClub$Strength %>% 
  graph_from_adjacency_matrix(mode = "undirected", weight = TRUE) %>% 
  plot()

3. Valued Tie Composition

## strength dataset
valued_g <- Zachary_KarateClub$Strength %>% 
  graph_from_adjacency_matrix(mode = "undirected", weight = TRUE)

create_summary_table(valued_g) %>%  glimpse(80)
Rows: 34
Columns: 9
$ Node                  <chr> "A01", "A02", "A03", "A04", "A05", "A06", "A07",…
$ Number_of_alters      <dbl> 16, 9, 10, 6, 3, 4, 4, 4, 5, 2, 3, 1, 2, 5, 2, 2…
$ Sum_of_tie_strengths  <dbl> 42, 29, 33, 18, 8, 14, 13, 13, 17, 3, 8, 3, 4, 1…
$ Average_tie_strength  <dbl> 2.625000, 3.222222, 3.300000, 3.000000, 2.666667…
$ SD_tie_strength       <dbl> 0.9574271, 1.6414763, 1.6363917, 0.0000000, 0.57…
$ Median_tie_strength   <dbl> 2.5, 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, 3.5, 3.0, 1.5…
$ Minimum_tie_strength  <dbl> 1, 1, 1, 3, 2, 3, 2, 2, 2, 1, 2, 3, 1, 3, 2, 3, …
$ Maximum_tie_strength  <dbl> 5, 6, 6, 3, 3, 5, 5, 4, 5, 2, 3, 3, 3, 5, 3, 4, …
$ Range_of_tie_strength <dbl> 4, 5, 5, 0, 1, 2, 3, 2, 3, 1, 1, 0, 2, 2, 1, 1, …

3. Valued Tie Composition

a26_g <- valued_g %>% make_ego_graph(order = 1, nodes = "A26")
a26_g[[1]] %>% 
  plot(
    edge.width = E(a26_g[[1]])$weight,
  )

create_summary_table(valued_g) %>% 
  pivot_longer(cols = -Node, names_to = "type", values_to = "value") %>%
  ggplot(aes(x=value, y=0))+
  geom_boxplot(outlier.alpha = 0)+
  geom_jitter(height = 0.1, aes(col = factor(ifelse(Node == "A26",1,0))))+
  facet_wrap(~type, scales = "free")+
  theme(legend.position = "none")

3. Valued Tie Composition

4. Alter Composition

ตัวชี้วัดกลุ่มนี้มีวัตถุประสงค์เพื่อทำความเข้าใจว่า ego แต่ละตัวมีการเชื่อมโยง/สัมพันธ์กับ alters ประเภทไหนบ้าง

  • categorical attributes

  • continuous attributes

categorical attributes

ตัวอย่างเครือข่ายความเป็นเพื่อนในบริษัท เรามีวัตถุประสงค์ต้องการวิเคราะห์ว่า ego แต่ละคนมีเพื่อนอยู่ในแผนกใดบ้างของบริษัท

# A tibble: 21 × 13
# Groups:   ego, Department_ego [21]
   ego   Department_ego     IQV freq_0 freq_1 freq_2 freq_3 freq_4  prop_0
   <chr>          <int>   <dbl>  <int>  <int>  <int>  <int>  <int>   <dbl>
 1 A01                4   0.6        0      2      0      0      3   0    
 2 A02                4   0.833      0      1      0      1      1   0    
 3 A03                2   0          0      0      2      0      0   0    
 4 A04                4   0.625      0      3      0      0      3   0    
 5 A05                2   0.867      0      2      3      1      1   0    
 6 A06                1   0.833      1      3      1      0      1   0.167
 7 A07                0 NaN          0      0      0      0      0   0    
 8 A08                1   0          0      0      0      0      1   0    
 9 A09                2 NaN          0      0      0      0      0 NaN    
10 A10                3   0.714      0      2      4      0      1   0    
# ℹ 11 more rows
# ℹ 4 more variables: prop_1 <dbl>, prop_2 <dbl>, prop_3 <dbl>, prop_4 <dbl>

continuous attribute

แนวทางข้างต้นสามารถนำมาใช้กับ attribute แบบต่อเนื่องได้ เช่น ระยะเวลาทำงานในองค์กร (tenue)

  • จำนวนระยะเวลาทำงานโดยเฉลี่ยของ alter (เพื่อนร่วมงาน) ของแต่ละ ego <— ระยะเวลาทำงานของ alter สะท้อนแหล่งทรัพยากร/ระดับความเชี่ยวชาญของผู้เชี่ยวชาญที่ ego สามารถเข้าถึงได้
# A tibble: 19 × 8
   ego   degree sum_tenure mean_tenure sd_tenure min_tenure max_tenure
   <chr>  <int>      <dbl>       <dbl>     <dbl>      <dbl>      <dbl>
 1 A01        5       52.0       10.4       5.67       4.67       19.6
 2 A02        3       30.9       10.3       1.90       9.08       12.5
 3 A03        2       15.3        7.63      3.95       4.83       10.4
 4 A04        6       66.2       11.0       4.96       4.67       19.6
 5 A05        7       92.2       13.2       7.86       4.83       27  
 6 A06        6       88.8       14.8       8.80       5.42       30  
 7 A08        1        7.5        7.5      NA          7.5         7.5
 8 A10        7       58.1        8.30      3.81       3.33       12.8
 9 A11       13      113.         8.71      4.86       0.25       19.6
10 A12        4       41.8       10.4       2.45       7.5        12.5
11 A13        2       30.3       15.2      16.7        3.33       27  
12 A14        2       38.4       19.2      15.3        8.42       30  
13 A15        8      101.        12.6       9.69       3.33       28  
14 A16        2       28.9       14.5       7.25       9.33       19.6
15 A17       18      225.        12.5       8.20       3.33       30  
16 A18        1       19.6       19.6      NA         19.6        19.6
17 A19        9      111.        12.4       6.97       3.33       27  
18 A20        2       36.1       18.0      12.7        9.08       27  
19 A21        4       50         12.5       4.99       8.92       19.6
# ℹ 1 more variable: range_tenure <dbl>

5. Ego-alter similarity

  • วัดความคล้ายคลึงระหว่าง ego กับ alter ในเชิงของคุณลักษณะที่สนใจ

  • categorical attributes

  • continuous attributes

categorical attributes

  • สมมุติว่าวัตถุแประสงค์คือการวัดความคล้ายคลึงระหว่าง ego กับ alter ในเชิงของแผนกงานที่ทำงาน

  • การวัดความคล้ายคลึงระหว่าง ego กับ alter สำหรับตัวแปรแบบจัดประเภท สามารถทำได้หลายวิธีการ

    • จำนวนเพื่อนร่วมงานที่อยู่ใน department เดียวกับ ego

    • จำนวนเพื่อนร่วมงานที่อยู่คนละ department กับ ego

    • จำนวนคนที่ไม่ใช่เพื่อนร่วมงานแต่อยู่ department เดียวกับ ego

    • จำนวนคนที่ไม่ใช่เพื่อนร่วมงานแต่อยู่คนละ department กับ ego

    • สัดส่วน alter ที่อยู่ในกลุ่มเดียวกับ ego (proportion same: S measure)

    • EI index

\[ EI = \frac{E-I}{E+I} \]

  • โดยที่ \(E\) จำนวน tie ไปยัง alter ที่อยู่ต่างกลุ่มกับ ego และ \(I\) จำนวน tie ไปยัง alter ที่อยู่ในกลุ่มเดียวกับ ego

  • EI มีค่าเข้าใกล้ 1 หมายถึง ego มีแนวโน้มเป็นเพื่อนหรือมีความสัมพันธ์กับ alter ที่มีความแตกต่างจากตัวเองมาก

continuous attributes

ในทำนองเดียวกัน วัดความคล้ายคลึงระหว่าง ego-alter สำหรับตัวแปรต่อเนื่อง เช่น

  • ความแตกต่างสัมบูรณ์ระหว่าง ego กับ mean ของ alter

  • \(I_{ij} = 1-\frac{|X_i-X_j|}{max(X)-min(X)}\)

  • correlation coefficients

    • คำนวณค่าความแตกต่างระหว่าง ego กับ alter เป็นรายคู่ โดยทำให้เป็นเครื่องหมายบวกเสมอ เช่น อาจใช้ค่าสัมบูรณ์ หรือกำลังสองของค่าความแตกต่าง เขียนแทนด้วย \(D_{ij} = |X_i-X_j|\), \(D_{ij} = (X_i-X_j)^2\)

    • คำนวณ correlation ระหว่างผลต่างดังกล่าวกับข้อมูล ties (1 = มี, 0 = ไม่มีความสัมพันธ์) <– เรียกว่า point-biserial correlation

    • ค่าสหสัมพันธ์เชิงลบที่สูง หมายความว่า Ego มักสร้างความสัมพันธ์กับ alter ที่มีคุณลักษณะใกล้เคียงกัน

    • ค่าสหสัมพันธ์เชิงบวกที่สูง หมายความว่า Ego มักสร้างความสัมพันธ์กับ alter ที่มีคุณลักษณะแตกต่างกัน